package co.edu.udea.iw.prestamos.util.seguridad;

import java.math.BigInteger;
import java.security.SecureRandom;

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.stereotype.Service;

/**
 * Administrador para el manejo de la autenticacion de los usuarios.
 * @author Dave Rivera <daverivera90@gmail.com>
 * @since 12-07-2014
 * @version 1.0
 */
@Configurable
@Service("autenticacion")
public class Autenticacion {
	
	/**
	 * Genera un Salt de manera aleatoria para ser usado en la generacion de un password seguro
	 * @return Salt aleatorio
	 */
	public String generarSalt(){
		SecureRandom random = new SecureRandom();
		return new BigInteger(130, random).toString(32);
	}
	
	/**
	 * Genera un password seguro para ser almacenado o comparado a partir del salt usando el hash md5
	 * @param password Contraseña a ser almacenada
	 * @param salt     Informacion adicional para asegurar el password
	 * @return		   Un string que contiene el password asegurado y listo para almacenarse o compararse
	 */
	public String generarSecurePassword(String password, String salt){
		String concat = password + salt;
		return DigestUtils.md5Hex(concat);
	}
	
	/**
	 * Generador de tokens.
	 * 
	 * Genera tokens usando todos los parametros ingresados.
	 * Concatena todos los parametros y luego genera un hash MD5 hexadecimal para
	 * obtener el token.
	 * @param args Arreglo de parametros para generar el token
	 * @return	   Token
	 */
	public String generarToken(String... args){
		String concat = new String();
		
		for (String arg : args)
			concat.concat(arg);
		 
		return DigestUtils.md5Hex(concat);
	}

}
